﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Net;
using System.Web;
using System.Web.Mvc;
using blacksoft.Models;
using blacksoft.Constantes;
namespace blacksoft.Controllers
{
    public class PerfilsController : Controller
    {
        public static readonly int ADMINISTRACION = 0;
        public static readonly int COMPRAS = 1;
        public static readonly int VENTA = 2;
        public static readonly int SEGURIDAD = 3;
        public static readonly int GLOBAL = 4;
        private inf245travelbusEntities db = new inf245travelbusEntities();
        // GET: Perfils
        public ActionResult Index()
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.SEGURIDAD))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            return View(db.Perfil.ToList());
        }

        // GET: Perfils/Details/5
        public ActionResult Details(int? id)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.SEGURIDAD))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Perfil perfil = db.Perfil.Find(id);
            if (perfil == null)
            {
                return HttpNotFound();
            }
            Xperfil xperfil = new Xperfil();
            xperfil.IDPerfil = perfil.IDPerfil;
            xperfil.Nombre = perfil.Nombre;
            xperfil.Descripcion = perfil.Descripcion;
            int a = perfil.permisos!=null?(int)perfil.permisos:0;
            xperfil.Administracion = PerfilsController.TienePermiso(a, PerfilsController.ADMINISTRACION);
            xperfil.Ventas = PerfilsController.TienePermiso(a, PerfilsController.VENTA);
            xperfil.Compras = PerfilsController.TienePermiso(a, PerfilsController.COMPRAS);
            xperfil.Seguridad = PerfilsController.TienePermiso(a, PerfilsController.SEGURIDAD);
            xperfil.Global = PerfilsController.TienePermiso(a, PerfilsController.GLOBAL);
            return View(xperfil);
        }

        // GET: Perfils/Create
        public ActionResult Create()
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.SEGURIDAD))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            return View();
        }

        // POST: Perfils/Create
        // Para protegerse de ataques de publicación excesiva, habilite las propiedades específicas a las que desea enlazarse. Para obtener 
        // más información vea http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "IDPerfil,Nombre,Descripcion,Administracion, Compras, Ventas,Seguridad,Global")] Xperfil xperfil)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.SEGURIDAD))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            if (ModelState.IsValid)
            {
                Perfil perfil = new Perfil();
                perfil.Nombre = xperfil.Nombre;
                perfil.Descripcion = xperfil.Descripcion;
                perfil.permisos = 0;
                perfil.permisos += xperfil.Administracion ? 1 : 0;
                perfil.permisos += xperfil.Compras ? 2 : 0;
                perfil.permisos += xperfil.Ventas ? 4 : 0;
                perfil.permisos += xperfil.Seguridad ? 8 : 0;
                perfil.permisos += xperfil.Global ? 16 : 0;
                db.Perfil.Add(perfil);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(xperfil);
        }

        // GET: Perfils/Edit/5
        public ActionResult Edit(int? id)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.SEGURIDAD))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            if (id == null)
            {
                return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
            }
            Perfil perfil = db.Perfil.Find(id);
            if (perfil == null)
            {
                return HttpNotFound();
            }
            Xperfil xperfil = new Xperfil();
            xperfil.IDPerfil = perfil.IDPerfil;
            xperfil.Nombre = perfil.Nombre;
            xperfil.Descripcion = perfil.Descripcion;
            int a = perfil.permisos != null ? (int)perfil.permisos : 0;
            xperfil.Administracion = PerfilsController.TienePermiso(a, PerfilsController.ADMINISTRACION);
            xperfil.Ventas = PerfilsController.TienePermiso(a, PerfilsController.VENTA);
            xperfil.Compras = PerfilsController.TienePermiso(a, PerfilsController.COMPRAS);
            xperfil.Seguridad = PerfilsController.TienePermiso(a, PerfilsController.SEGURIDAD);
            xperfil.Global = PerfilsController.TienePermiso(a, PerfilsController.GLOBAL);



            return View(xperfil);
        }

        // POST: Perfils/Edit/5
        // Para protegerse de ataques de publicación excesiva, habilite las propiedades específicas a las que desea enlazarse. Para obtener 
        // más información vea http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Edit([Bind(Include = "IDPerfil,Nombre,Descripcion,Administracion, Compras, Ventas,Seguridad,Global")] Xperfil xperfil)
        {
            //NO ESTOY LOGUEADO EN EL SISTEMA
            if (Session["Permisos"] == null)
            {
                TempData["LogueatePrimero"] = SystemField.NO_LOGUEADO;
                return RedirectToAction("Index", "ValidarLogin");
            }
            //ESTOY LOGUEADO PERO NO TENGO PERMISO PARA REALIZAR ESTA ACCION
            if (!PerfilsController.TienePermiso((int)Session["Permisos"], PerfilsController.SEGURIDAD))
            {
                TempData["SinPermiso"] = SystemField.SIN_PERMISO;
                return RedirectToAction("Index", "MainPageEmployes");
            }
            if (ModelState.IsValid)
            {
                Perfil perfil = db.Perfil.Find(xperfil.IDPerfil);
                perfil.permisos = 0;
                perfil.permisos += xperfil.Administracion ? 1 : 0;
                perfil.permisos += xperfil.Compras ? 2 : 0;
                perfil.permisos += xperfil.Ventas ? 4 : 0;
                perfil.permisos += xperfil.Seguridad ? 8 : 0;
                perfil.permisos += xperfil.Global ? 16 : 0;
                db.Entry(perfil).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
      
            return View(xperfil);
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                db.Dispose();
            }
            base.Dispose(disposing);
        }
        public static Boolean TienePermiso(int a, int pos)
        {
            if (pos == 0)
                return a % 2 > 0 ? true : false;
            int b = a % (int)Math.Pow(2, pos+1) - a % (int)Math.Pow(2, pos);
            return b > 0 ? true : false;
        }
    }
}
